package bancosys.tec.utils.reader;

import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.LinkedList;
import java.util.List;

/**
 * Extrator de dados de URLs que apontam para arquivos fisicos.
 * 
 * @author Rafael Volpato
 */
public class FileURLReader implements URLReader {

    /**
     * Retorna todos os arquivos de uma arvore que estejam de acordo com a pattern informada.
     * 
     * @param urlRoot url inicial
     * @param pattern pattern
     * @return lista de arquivos
     * @throws IOException se ocorrer algum erro
     */
    public List<URL> getFiles(URL urlRoot, String pattern) throws IOException {
        try {
            List<URL> files;
            files = new LinkedList<URL>();
            File root = new File(urlRoot.toURI());
            if (root.isDirectory()) {
                for (File file : root.listFiles()) {
                    files.addAll(this.getFiles(file.toURI().toURL(), pattern));
                }
            } else if (root.isFile() && root.getAbsolutePath().matches(pattern)) {
                files.add(root.toURI().toURL());
            }
            return files;
        } catch (URISyntaxException e) {
            IOException ioe = new IOException("IOException reading from URL");
            ioe.initCause(e);
            throw ioe;
        }

    }
}
